using Drill.Extensibility;

namespace Drill.Configuration
{
	/// <summary>
	/// Implemented by classes that represent configuration data for a dependency resolver.
	/// </summary>
	public interface IDependencyResolverConfiguration
	{
		/// <summary>
		/// Gets the DrillBit configuration collection.
		/// </summary>
		/// <value>
		/// The DrillBit configuration collection.
		/// </value>
		IDrillBitConfigurationCollection DrillBits { get; }

		/// <summary>
		/// Gets a value indicating whether this <see cref="IDependencyResolverConfiguration"/> is enabled.
		/// </summary>
		/// <value><c>true</c> if enabled; otherwise, <c>false</c>.</value>
		bool Enabled { get; }

		/// <summary>
		/// Gets or sets the name of the dependency resolver.
		/// </summary>
		/// <value>The name of the dependency resolver.</value>
		string Name { get; }
		IRootPathProviderConfigurationCollection RootPathProviders { get; }
		ISearchPathConfigurationCollection SearchPaths { get; }

		/// <summary>
		/// Gets the assembly-qualified type name of the concrete type that is configured as a dependency resolver.
		/// The type must implement either <see cref="IDrillBit"/> or <see cref="IDependencyResolver"/>.
		/// </summary>
		/// <value>The assembly-qualified type name of the concrete type that is configured as a dependency resolver.</value>
		string Type { get; }
	}
}